import {
  Controller,
  Get,
  Req,
  Param,
  Post,
  HttpCode,
  Header,
  Query,
  Redirect,
} from '@nestjs/common'

/**
 * 前缀和请求装饰器
 **/
@Controller('cats')
export class CatsController {
  /**
   * 使用 get 装饰器，告诉 nest http get 请求处理
   * get 装饰器 默认不填任何内容表示匹配 /
   * */
  @Get()
  findAll(): string {
    return 'this action returns all cats'
  }
  /**
   * 装饰器 get 中的名称（路由名称）和 处理方法一点关系都没有
   * 只返回一个 基本类型时， nest 只发送值，不尝试序列化，使得响应处理变得简单
   * **/
  @Get('findOne')
  findOne(): string {
    return 'find one cat'
  }
  // Request 请求对象
  @Get('reqObj')
  reqObj(@Req() req: Request, @Param('id') param: Request): string {
    // console.log(req)
    console.log(param)
    // 处理请求对象
    return '控制台获取请求详细信息'
  }
  /**
   * 使用 post 装饰器 定义 post 请求
   * **/
  @Post()
  postReq(): string {
    return 'post 请求'
  }

  /**
   * 路由通配符
   * **/
  @Get('aa*bb?')
  anyName(): string {
    return '路由通配符使用'
  }

  /**
   * 状态码
   **/
  @Get('create')
  @HttpCode(201)
  create(): string {
    return '返回201的状态码'
  }

  /**
   * headers 自定义响应头
   **/
  @Get('resHeader')
  @Header('Cache-Control', 'none')
  header(): string {
    return '自定义响应头信息'
  }

  /**
   * 重定向
   **/
  @Get('docs')
  @Redirect('https://docs.nestjs.com', 302)
  getDoc(@Query('version') version: number): object {
    if (version && version === 5) {
      return {
        url: 'https://docs.nestjs.com/v5/',
      }
    }
  }

  /**
   * 请求参数
   ***/
  @Get('reqParam')
  getParam(@Query('id') id: number, @Query('version') version: number): string {
    console.log(id)
    console.log(version)
    return '查看请求入参'
  }
  /**
   * 路由参数
   * 使用动态路由作为请求的一部分，静态路由将无法工作。
   
  @Get(':id')
  getRouerParam(@Param() params: any): string {
    console.log(params.id)
    return `路由参数id${params.id}`
  }
  **/
  @Get(':id2')
  getRouerParam2(@Param('id2') id2: number): string {
    console.log(id2)
    return `路由参数id${id2}`
  }
}
